﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TireService.Data
{
    public partial class TireSet
    {
        TireServiceDB db = new TireServiceDB();

        /// <summary>
        /// Validation rules to ensure data is filled out in mandatory fields
        /// </summary>
        partial void OnValidate(System.Data.Linq.ChangeAction action)
        {
            if (this.CarId == null)
            {
                throw new ArgumentException("Bil skal angives for hjulsæt.");
            }

            if (this.TireTypeId == null)
            {
                throw new ArgumentException("Dæktype skal udfyldes.");
            }

            if (this.DummyTireSet != true)
            {
                if (this.Size == null)
                {
                    throw new ArgumentException("Størrelsen på hjulet skal angives.");
                }

                if (this.Width == null)
                {
                    throw new ArgumentException("Dækkets bredde skal angives.");
                }

                if (this.Height == null)
                {
                    throw new ArgumentException("Dækkets profil højde skal angives.");
                }

                if (this.TireSpeedIndexId == null)
                {
                    throw new ArgumentException("Hastighedsindex skal angives.");
                }

                if (this.TireBrandId == null)
                {
                    throw new ArgumentException("Dækmærke skal angives.");
                }

                if (this.LockingBolt == null)
                {
                    throw new ArgumentException("Angiv venligst om der anvendes låsebolt.");
                }

                if (this.HubCaps == null)
                {
                    throw new ArgumentException("Angiv venligst om der er tilhørende hjulkapsler.");
                }

                if (this.TireLoadIndexId == null)
                {
                    throw new ArgumentException("Belastningsindex skal angives.");
                }

                if (this.RunFlatTire == null)
                {
                    throw new ArgumentException("Angiv venligst om dækkene er Run-Flat dæk.");
                }

                //if (this.ManufactureDate == null)
                //{
                //    throw new ArgumentException("Produktionsdato skal angives.");
                //}

                if (this.RimProtection == null)
                {
                    throw new ArgumentException("Angiv venligst om der er kant beskytter.");
                }

                //if (this.SocketWrenchSize == null)
                //{
                //    throw new ArgumentException("Angiv venligst topnøgle størrelse.");
                //}
            }

            if (this.TireSetStatusId == null)
            {
                throw new ArgumentException("Dækstatus skal angives.");
            }
        }

        partial void OnTireSetStatusIdChanging(int value)
        {
            // ERROR: Udkommenteret d. 13/10-2012, måske bruges senere
            //// Check if any open tasks on tireset
            //int[] tasktypestatus = new int[] { (int)Shared.TaskTypeStatus.ServiceDrive_Created, (int)Shared.TaskTypeStatus.ServiceDrive_Planned, (int)Shared.TaskTypeStatus.ServiceDrive_Replan };
            //List<Task> opentasks = db.GetTasksByTireSetAndTaskTypeStatus(this.TireSetId, tasktypestatus);

            //if (opentasks.Count != 0)
            //{
            //    // Check that taskstatus and new tireset status id does not conflict with any open tasks
            //    foreach (Task opentask in opentasks)
            //    {
            //        // Check for each taskdetail if any conflicts
            //        List<TaskDetail> opentaskdetails = opentask.TaskDetails.ToList();

            //        if (opentaskdetails.Count != 0)
            //        {
            //            foreach (TaskDetail opentaskdetail in opentaskdetails)
            //            {
            //                if (value == (int)Shared.TireSetStatus.PlacedAtCustomer)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ReturnTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til placeret hos kunde, da der ligger aktiv opgave omkring aflevering af hjul.");
            //                    }
            //                }

            //                if (value == (int)Shared.TireSetStatus.MountedOnCar)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_PickUpTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til monteret på bil, da der ligger aktiv opgave omkring afhentning af hjul.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ChangeTire)
            //                    {
            //                        // Note til mig selv - denne validering vil sikkert give problemer medmindre jeg submitter task ændringer før bil / hjulsæt ændringer
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til monteret på bil, da der ligger aktiv opgave omkring hjulskift.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ReturnTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til monteret på bil, da der ligger aktiv opgave omkring aflevering af hjul.");
            //                    }
            //                }

            //                if (value == (int)Shared.TireSetStatus.OnStock)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_PickUpTire)
            //                    {
            //                        // Note til mig selv - denne validering vil sikkert give problemer medmindre jeg submitter task ændringer før bil / hjulsæt ændringer
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til på lager, da der ligger aktiv opgave omkring afhentning af hjul.");
            //                    }
            //                }

            //                if (value == (int)Shared.TireSetStatus.StockedAtCustomer)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ReturnTire)
            //                    {
            //                        // Note til mig selv - denne validering vil sikkert give problemer medmindre jeg submitter task ændringer før bil / hjulsæt ændringer
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til opbevares hos kunden, da der ligger aktiv opgave omkring aflevering af hjul.");
            //                    }
            //                }

            //                if (value == (int)Shared.TireSetStatus.ReturnedToCustomer)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_PickUpTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til returneret til kunden, da der ligger aktiv opgave omkring afhentning af hjul.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ChangeTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til returneret til kunden, da der ligger aktiv opgave omkring hjulskift.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ReturnTire)
            //                    {
            //                        // Note til mig selv - denne validering vil sikkert give problemer medmindre jeg submitter task ændringer før bil / hjulsæt ændringer
            //                        throw new ArgumentException("Hjulsæt status kan ikke ændres til returneret til kunden, da der ligger aktiv opgave omkring aflevering af hjul.");
            //                    }
            //                }

            //                if (value == (int)Shared.TireSetStatus.InActive)
            //                {
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_PickUpTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt kan ikke deaktiveres, da der ligger aktiv opgave omkring afhentning af hjul.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ChangeTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt kan ikke deaktiveres, da der ligger aktiv opgave omkring hjulskift.");
            //                    }
            //                    if (opentaskdetail.TaskDetailTypeId == (int)Shared.TaskDetailType.ServiceDrive_ReturnTire)
            //                    {
            //                        throw new ArgumentException("Hjulsæt kan ikke deaktiveres, da der ligger aktiv opgave omkring aflevering af hjul.");
            //                    }
            //                }
            //            }

            //        }
            //    }
            //}

            if (value == (int)Shared.TireSetStatus.OnStock)
            {
                if (this.ContainerCargoRoomId == null)
                {
                    throw new ArgumentException("Der skal angives en lager lokation for hjulsættet.");
                }
            }
        }
    }
}
